﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using EnnErrE.Utils.Numbers;

namespace EnnErrE.BillFiller
{
    /// <summary>
    /// Veicola i dati da inserire in un bollettino.
    /// </summary>
    public class BillData
    {
        /// <summary>
        /// Memorizza l'importo.
        /// </summary>
        private decimal amount;
        /// <summary>
        /// Memorizza il numero di conto corrente.
        /// </summary>
        private string accountNumber;
        /// <summary>
        /// Memorizza l'intestatario del conto corrente.
        /// </summary>
        private string company;
        /// <summary>
        /// Memorizza la causale del versamento.
        /// </summary>
        private string motivation;
        /// <summary>
        /// Memorizza il nome dell'autore del versamento.
        /// </summary>
        private string author;
        /// <summary>
        /// Memorizza l'indirizzo dell'autore del versamento.
        /// </summary>
        private string address;
        /// <summary>
        /// Memorizza il C.A.P. dell'autore del versamento.
        /// </summary>
        private string zip;
        /// <summary>
        /// Memorizza la citt&agrave; dell'autore del versamento.
        /// </summary>
        private string city;
        /// <summary>
        /// Imposta/Restituisce l'importo del versamento.
        /// </summary>
        public decimal Amount { get { return amount; } set { amount = value; } }
        /// <summary>
        /// Restituisce l'importo del versamento in lettere.
        /// </summary>
        public string LiteralizedAmount
        {
            get
            {
                decimal amount = decimal.Truncate(Amount);
                return string.Format("{0}/{1:00}", Numbers.Literalize(amount), decimal.Truncate((Amount - amount) * 100));
            }
        }
        /// <summary>
        /// Imposta/Restituisce il numero di conto corrente.
        /// </summary>
        public string AccountNumber { get { return accountNumber; } set { accountNumber = value; } }
        /// <summary>
        /// Imposta/Restituisce l'intestatario del conto corrente.
        /// </summary>
        public string Company { get { return company; } set { company = value; } }
        /// <summary>
        /// Imposta/Restituisce la causale del versamento.
        /// </summary>
        public string Motivation { get { return motivation; } set { motivation = value; } }
        /// <summary>
        /// Imposta/Restituisce il nome dell'autore del versamento.
        /// </summary>
        public string Author { get { return author; } set { author = value; } }
        /// <summary>
        /// Imposta/Restituisce l'indirizzo dell'autore del versamento.
        /// </summary>
        public string Address { get { return address; } set { address = value; } }
        /// <summary>
        /// Imposta/Restituisce il C.A.P. dell'autore del versamento.
        /// </summary>
        public string ZIP { get { return zip; } set { zip = value; } }
        /// <summary>
        /// Imposta/Restituisce la citt&agrave; dell'autore del versamento.
        /// </summary>
        public string City { get { return city; } set { city = value; } }
        /// <summary>
        /// Costruttore di default.
        /// </summary>
        public BillData() : this("12345678", 12345678.90m, "Company", "Motivation", "Author Name", "Address", "12345", "City (DI)") { }
        /// <summary>
        /// Costruttore.
        /// </summary>
        /// <param name="billNumber">Numero di conto corrente.</param>
        /// <param name="amount">Importo del versamento.</param>
        /// <param name="company">Intestatario del conto corrente.</param>
        /// <param name="motivation">Causale del versamento.</param>
        /// <param name="author">Nome dell'autore del versamento.</param>
        /// <param name="address">Indirizzo dell'autore del versamento.</param>
        /// <param name="zip">C.A.P. dell'autore del versamento.</param>
        /// <param name="city">Citt&agrave; dell'autore del versamento.</param>
        public BillData(string billNumber, decimal amount, string company, string motivation, string author, string address, string zip, string city)
        {
            this.accountNumber = billNumber;
            this.amount = amount;
            this.company = company;
            this.motivation = motivation;
            this.author = author;
            this.address = address;
            this.zip = zip;
            this.city = city;
        }
    }
}
